//package common.aopLog;
//
//
//import com.alibaba.fastjson.JSON;
//import com.yuntsg.ruiijn.database.entity.LogOperation;
//import com.yuntsg.ruiijn.database.mapper.LogOperationMapper;
//import com.yuntsg.ruiijn.database.mapper.SysUserMapper;
//import common.util.DateUtils;
//import common.util.IPUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.JoinPoint;
//import org.aspectj.lang.annotation.AfterReturning;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.aspectj.lang.reflect.MethodSignature;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.core.DefaultParameterNameDiscoverer;
//import org.springframework.core.ParameterNameDiscoverer;
//import org.springframework.stereotype.Component;
//import org.springframework.web.context.request.RequestAttributes;
//import org.springframework.web.context.request.RequestContextHolder;
//
//import javax.servlet.http.HttpServletRequest;
//import java.lang.reflect.Method;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.Objects;
//
//@Slf4j
//@Aspect
//@Component
//@SuppressWarnings("all")
//public class LogAop {
//
//    @Autowired
//    private LogOperationMapper operationMapper;
//    @Autowired
//    private SysUserMapper sysUserMapper;
//
//    @Pointcut("@annotation(common.aopLog.OperationLog)")
//    public void operationLogPointCut() {
//    }
//
//    @AfterReturning(pointcut = "operationLogPointCut()", returning = "results")
//    public void saveOperationLog(JoinPoint joinPoint, Object results) {
//        System.out.println("进操作日志的方法___");
//        //获取RequestAttributes
//        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
//        // 从获取RequestAttributes中获取HttpServletRequest的信息
//        HttpServletRequest request = (HttpServletRequest) Objects.requireNonNull(requestAttributes).resolveReference(RequestAttributes.REFERENCE_REQUEST);
//
//        try {
//            String header = request.getHeader("User-Agent");
//
//            LogOperation logOperation = new LogOperation();
//
//            logOperation.setUid(userUtil.getUid());
//
//            String realName = sysUserMapper.selectById(userUtil.getUid()).getRealName();
//            logOperation.setName(realName);
//
//            logOperation.setUserAgent(header);
//
//            // 从切面织入点处通过反射机制获取织入点处的方法
//            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
//            // 获取切入点所在的方法
//            Method method = signature.getMethod();
//
//
//            OperationLog operationLog = method.getAnnotation(OperationLog.class);
//
//            // 操作模块
//            logOperation.setOperationModule(operationLog.operationModule());
//            // 操作类型
//            logOperation.setOperationType(operationLog.operationType());
//            // 操作描述
//            logOperation.setOperationDesc(operationLog.operationDesc());
//
//            logOperation.setMethod(method.toString());
//            // System.out.println("切入点所在的方法" + method);
//            // 获取请求的类名
//            String className = joinPoint.getTarget().getClass().getName();
//            logOperation.setClassName(className);
//            // System.out.println("获取请求的类名" + className);
//            // 获取请求的方法名
//            String methodName = method.getName();
//            logOperation.setMethodName(methodName);
//            // System.out.println("获取请求的方法" + methodName);
//            try {
//                // 请求的参数
//                Map<String, Object> rtnMap = convertMap(joinPoint, method);
//                // 将参数所在的数组转换成json
//                String params = JSON.toJSONString(rtnMap);
//                logOperation.setParams(params);
//            } catch (Exception e) {
//
//            }
//
//            // System.out.println("获取请求的参数" + params);
//
//            String result = JSON.toJSONString(results);
//            logOperation.setResult(result);
//
//            String ipAddr = IPUtil.getIpAddr(request);
//            logOperation.setIpAddr(ipAddr);
//
//            String requestURI = request.getRequestURI();
//            logOperation.setRequestURI(requestURI);
//
//            logOperation.setTime(DateUtils.longToStr(System.currentTimeMillis()));
//
//            try {
//                int insert = operationMapper.insert(logOperation);
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//
//
//            log.info("获取请求的url:" + requestURI);
//            //log.info("获取请求的结果:" + result);
//        } catch (Exception e) {
//
//        }
//    }
//
//    /**
//     * 转换request 请求参数
//     *
//     * @param joinPoint
//     * @param method
//     * @return
//     */
//    private Map<String, Object> convertMap(JoinPoint joinPoint, Method method) {
//        // 参数值
//        Object[] args = joinPoint.getArgs();
//        ParameterNameDiscoverer parameterNameDiscoverer = new DefaultParameterNameDiscoverer();
//        String[] parameterNames = parameterNameDiscoverer.getParameterNames(method);
//        Map<String, Object> paramMap = new HashMap<>();
//        for (int i = 0; i < Objects.requireNonNull(parameterNames).length; i++) {
//            if (args == null || args.length == 0) {
//                paramMap.put(parameterNames[i], "none");
//                continue;
//            }
//            String argsStr = "";
//            if (args[i] != null) {
//                argsStr = JSON.toJSONString(args[i]);
//            }
//            String param = "";
//            if (parameterNames[i] != null) {
//                param = parameterNames[i];
//            }
//
//            paramMap.put(param, argsStr);
//        }
//        return paramMap;
//    }
//}
